#pragma once

#include "vkinfer/runtime/blob.h"
#include "vkinfer/runtime/operator.h"
#include "vkinfer/parser/onnxparser.h"
#include <memory>
#include <string>

namespace vkinfer
{
    // abstract layer for platform specific functionalities
    class Context
    {
    public:
        virtual void begin() {}
        virtual void end() {}
        virtual void submit() {}

        virtual std::shared_ptr<Blob> make_blob(const std::string& name, BlobTransferDirection direction) = 0;
        virtual std::shared_ptr<Blob> make_blob(const std::string& name, uint32_t count, BlobTransferDirection direction) = 0;
        virtual std::shared_ptr<Blob> make_blob(const std::string& name, const std::vector<uint32_t>& shape, BlobTransferDirection direction) = 0;
        virtual std::shared_ptr<Operator> make_op(const std::string& name, const std::shared_ptr<OnnxNodeInfo>& node_info) = 0;
    };
}
